package com.example.task3.service;

import com.example.task3.domain.Cake;

import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class ShoppingCart {
    /**
     * Map集合表示购物车
     */
    Map<String, ShoppingItem> cart;
    /**
     * 购物车中商品的种类
     */
    int amount;

    /**
     * 初始化一个空的购物车
     */
    public ShoppingCart() {
        cart=new HashMap<>();
        amount=0;
    }

    /**
     * 往购物车中添加蛋糕
     * @param cake
     * @param num
     */
    public void addItem(Cake cake,int num){
        //如果购物车中包含该蛋糕，增加其数量
        if(cart.containsKey(cake.getId())){
            ShoppingItem shoppingItem=cart.get(cake.getId());
            shoppingItem.inQuantity(num);
        }
        else{
            //否则创建一个ShoppingItem的对象，将其加入购物车
            ShoppingItem shoppingItem=new ShoppingItem(cake,num);
            cart.put(cake.getId(),shoppingItem);
            //购物车中商品种类加1
            amount++;
        }
    }

    /**
     * 获取购物车中所有商品
     * @return
     */
    public Collection<ShoppingItem> getItems(){
        return cart.values();
    }

    /**
     * 获取购物车中所有商品的总价
     * @return
     */
    public double getTotalPrice(){
        double total=0;
       for(ShoppingItem si:this.getItems()){
           //实现商品价格累加
        total+=si.getCake().getPrice()*si.getQuantity();
       }
       return total;
    }

    /**
     * 清空购物车中的商品
     */
    public void clear(){
        cart.clear();
    }

    /**
     * 移除购物车中的一项商品
     * @param id
     */
    public void removeItem(String id){
        cart.remove(id);
    }

    /**
     * 修改购物车中商品的数量
     * @param num
     */
    public void updateQuantity(String id,int num){
        //如果购物车中有该商品，修改其数量
        if(cart.containsKey(id)){
            ShoppingItem si=cart.get(id);
            si.setQuantity(num);
            //将修改后的ShoppingItem对象放入购物车

        }
        else{
            //否则抛出异常
           throw new IllegalArgumentException("购物车中没有找到ID为"+id+"的商品。");
        }
    }
    public int getAmount(){
        return amount;
    }
}
